package com.cx.utils.demo;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
 * @program: pms
 * @author: cx
 * @description: 双选号
 * @create: 2024-12-20 10:36
 **/
public class NumSelection {

    public static void main(String[] args) {
        // 要排除的号码
        Set<Integer> excludedNumbers = new HashSet<>();
        excludedNumbers.add(2);
        excludedNumbers.add(4);
        excludedNumbers.add(11);
        excludedNumbers.add(22);
        excludedNumbers.add(27);
        excludedNumbers.add(32);

        // 生成六个唯一的号码
        Set<Integer> sixNumbers = generateUniqueNumbers(1, 33, 6, excludedNumbers);
        // 生成一个号码
        int oneNumber = generateRandomNumber(1, 16, new HashSet<>()); // 这里不排除任何号码

        // 输出结果
        System.out.println("随机选择的六个号码: " + sixNumbers);
        System.out.println("随机选择的一个号码: " + oneNumber);
    }

    // 生成指定范围内的唯一随机号码，排除某些号码
    private static Set<Integer> generateUniqueNumbers(int min, int max, int count, Set<Integer> excluded) {
        Set<Integer> numbers = new HashSet<>();
        Random random = new Random();

        while (numbers.size() < count) {
            int number = random.nextInt(max - min + 1) + min; // 生成范围[1, max]内的随机数
            // 只添加不在排除列表中的号码
            if (!excluded.contains(number)) {
                numbers.add(number);
            }
        }

        return numbers;
    }

    // 生成一个随机号码，排除某些号码
    private static int generateRandomNumber(int min, int max, Set<Integer> excluded) {
        Random random = new Random();
        int number;

        do {
            number = random.nextInt(max - min + 1) + min; // 生成范围[min, max]内的随机数
        } while (excluded.contains(number)); // 如果号码在排除列表中，重新生成

        return number;
    }

}


